﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using Aandelendelen.Db;
using Aandelendelen.Caching;

namespace Aandelendelen.Obs
{
	public class Userinfo
	{
		public int Id;
		public int Referrer;
		public string Voorletters;
		public string Tussenvoegsel;
		public string Achternaam;
		public string Woonplaats;
		public string Email;
		public string Rekeningnummer;
		public string Gebruikersnaam;
		public bool Geslacht;
		public DateTime Geboortedatum;
		public decimal Saldo { get { return DataCache.GetSaldo(this.Id); } }
		public bool IsSecret = false;
		public DateTime PreviousLogin;
		internal bool IsAdmin = false;
		internal bool IsAdvertiser = false;
		public string Ip;
		public UserinfoCollection Referrals;

		//admin
		internal Userinfo()
		{
			this.IsAdmin = true;
		}

		internal Userinfo(ResultSet resultSet)
			: this(resultSet, true)
		{ }

		internal Userinfo(ResultSet resultSet, bool doRefs)
			: this(resultSet, 0, doRefs)
		{ }

		internal Userinfo(ResultSet resultSet, int row)
			: this(resultSet, row, true)
		{ }

		internal Userinfo(ResultSet resultSet, int row, bool doRefs)
		{
			object o;

			o = resultSet[row, "Id"];
			this.Id = (o == null ? 0 : (int)o);

			o = resultSet[row, "Voorletters"];
			this.Voorletters = (o == null ? null : (string)o);

			o = resultSet[row, "Tussenvoegsel"];
			this.Tussenvoegsel = (o == null ? null : (string)o);


			o = resultSet[row, "Achternaam"];
			this.Achternaam = (o == null ? null : (string)o);

			o = resultSet[row, "Woonplaats"];
			this.Woonplaats = (o == null ? "" : (string)o);

			o = resultSet[row, "Email"];
			this.Email = (o == null ? "" : (string)o);

			o = resultSet[row, "Rekeningnummer"];
			this.Rekeningnummer = (o == null ? "" : (string)o);

			o = resultSet[row, "Gebruikersnaam"];
			this.Gebruikersnaam = (o == null ? "" : (string)o);


			o = resultSet[row, "Geslacht"];
			this.Geslacht = (o == null ? false : (bool)o);

			o = resultSet[row, "Geboortedatum"];
			this.Geboortedatum = (o == null ? new DateTime(1980, 1, 1) : (DateTime)o);

			o = resultSet[row, "LastLogin"];
			this.PreviousLogin = (o == null ? new DateTime(1980, 1, 1) : (DateTime)o);

			o = resultSet[row, "Referrer"];
			this.Referrer = (o == null ? -1 : (int)o);

			if (doRefs)
				this.Referrals = new UserinfoCollection(this); //recursive !!

			this.Ip = ObjectFormatter.CurrentIp;
		}

		//internal Userinfo(ResultSet resultSet, int row, bool doRefs)
		//{
		//    this.Id = 1;

		//    this.Voorletters = "E";

		//    this.Tussenvoegsel = "";

		//    this.Achternaam = "Goldstein";

		//    this.Woonplaats = "Hoofddorp";

		//    this.Email = "e.goldstein@quicknet.nl";

		//    this.Rekeningnummer = "835314014";

		//    this.Gebruikersnaam = "tsagld";

		//    this.Geslacht = true;

		//    this.Geboortedatum = new DateTime(1967, 9, 1);

		//    this.PreviousLogin = new DateTime(1980, 1, 1);

		//    this.Referrer = 2;;

		//    if (doRefs)
		//        this.Referrals = new UserinfoCollection(this); //recursive !!

		//    this.Ip = ObjectFormatter.CurrentIp;
		//}

		//internal Userinfo(ResultSet resultSet, bool isAdvertiser)
		//{
		//    object o;

		//    o = resultSet[0, "Id"];
		//    this.Id = (o == null ? 0 : (int)o);

		//    this.Voorletters = (string)resultSet[0, "Voorletters"];
		//    this.Tussenvoegsel = (string)resultSet[0, "Tussenvoegsel"];
		//    this.Achternaam = (string)resultSet[0, "Achternaam"];
		//    this.Email = (string)resultSet[0, "Email"];
		//    this.Gebruikersnaam = (string)resultSet[0, "Gebruikersnaam"];

		//    o = resultSet[0, "Geslacht"];
		//    this.Geslacht = (o == null ? false : (bool)o);

		//    this.IsAdvertiser = true;

		//    this.Ip = ObjectFormatter.CurrentIp;
		//}

		internal Userinfo(string voorLetters, string tussenvoegsel, string achternaam, bool geslacht, string email)
		{
			this.Voorletters = voorLetters;
			this.Tussenvoegsel = tussenvoegsel;
			this.Achternaam = achternaam;
			this.Geslacht = geslacht;
			this.Email = email;

			this.Ip = ObjectFormatter.CurrentIp;
		}

		//internal Userinfo(int Id, string voorLetters, string tussenvoegsel, string achternaam, bool geslacht, string email)
		//    : this(voorLetters, tussenvoegsel, achternaam, geslacht, email)
		//{
		//    this.Id = Id;
		//}

		internal string MailAanhef
		{
			get
			{
				StringBuilder str = new StringBuilder("Geachte ", 256);

				str.Append(this.Geslacht ? "heer " : "mevrouw ");
				if (string.IsNullOrEmpty(this.Tussenvoegsel) == false)
				{
					str.Append(this.Tussenvoegsel);
					str.Append(" ");
				}
				str.Append(this.Achternaam);
				str.Append(",");
				str.Append("<br><br>");

				return str.ToString();
			}
		}

		internal string BankAccount
		{
			get
			{
				StringBuilder str = new StringBuilder(this.Rekeningnummer);

				str.Append(", t.n.v. ");
				str.Append(this.Geslacht ? " de heer " : " mevrouw ");
				str.Append(this.FullName);
				str.Append(" in ");
				str.Append(this.Woonplaats);

				return str.ToString();
			}
		}

		internal string FullName
		{
			get
			{
				StringBuilder str = new StringBuilder(this.Voorletters);

				str.Append(" ");
				if (string.IsNullOrEmpty(this.Tussenvoegsel) == false)
				{
					str.Append(this.Tussenvoegsel);
					str.Append(" ");
				}
				str.Append(this.Achternaam);

				return str.ToString();
			}
		}
	}
}